package com.eastjet.equipment.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.eastjet.equipment.mapper.DeviceInspectiontaskMapper;
import com.eastjet.equipment.mapper.DevicePatrolschemeMapper;
import com.eastjet.equipment.service.DevicePatrolschemeService;
import com.eastjet.equipment.service.DeviceRulesService;
import com.eastjet.equipment.util.CodeRules;
import com.eastjet.equipment.util.PageUtil;
import com.eastjet.equipment.util.RedisUtil;
import com.eastjet.maintenance.domain.*;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;

import java.util.List;
import java.util.Set;

/**
 * @author 杨博文
 * @description 针对表【device_patrolscheme(巡检计划表)】的数据库操作Service实现
 * @createDate 2024-11-25 09:23:38
 */
@Service
public class DevicePatrolschemeServiceImpl extends ServiceImpl<DevicePatrolschemeMapper, DevicePatrolscheme>
        implements DevicePatrolschemeService {


    @Autowired
    private RedisUtil redisUtil;
    @Autowired
    private RedisTemplate redisTemplate;

    @Autowired
    private DevicePatrolschemeMapper devicePatrolschemeMapper;

    @Autowired
    private DeviceInspectiontaskMapper deviceInspectiontaskMapper;

    @Override
    public Page<DevicePatrolscheme> schemeList(int page, int size, String condition, String type, String name) {
        // 定义Redis中的键
        String redisKey = "SchemeList:" + type + name;
        System.out.println("SchemeList-condition:" + condition);
        System.out.println("SchemeList-type:" + type);
        // 先查缓存Redis
        if (redisUtil.hasKey(redisKey)) {
            System.out.println(1);
            System.out.println("schemeList-从Redis中获取数据");
            List<DevicePatrolscheme> schemeList;
            if (condition != null && !condition.isEmpty() && condition != "") {
                System.out.println(2);
                schemeList = devicePatrolschemeMapper.schemeList(condition, type, name); // 获取所有数据
            } else if(name != null && !name.isEmpty() && name != ""){
                schemeList = devicePatrolschemeMapper.schemeList(condition, type, name); // 获取所有数据

            }else {
                System.out.println(3);
                schemeList = (List<DevicePatrolscheme>) redisUtil.get(redisKey);
            }
            // 使用PageUtil进行分页
            return PageUtil.paginate(schemeList, page, size);
        } else {
            System.out.println(4);
            System.out.println("在数据库中查询projectList");
            List<DevicePatrolscheme> schemeList;
            // 根据condition条件查询
            if (condition != null && !condition.isEmpty() && condition != "") {
                System.out.println(5);
                schemeList = devicePatrolschemeMapper.schemeList(condition, type, name); // 获取所有数据
            } else if(name != null && !name.isEmpty() && name != ""){
                schemeList = devicePatrolschemeMapper.schemeList(condition, type, name); // 获取所有数据
            }else {
                System.out.println(6);
                condition = "";
                schemeList = devicePatrolschemeMapper.schemeList(condition, type, ""); // 获取所有数据
                // 将数据存入Redis
                redisUtil.set(redisKey, schemeList);
            }
            // 使用PageUtil进行分页
            return PageUtil.paginate(schemeList, page, size);
        }
    }

    @Override
    public String addDevicePatrol(DevicePatrolscheme devicePatrolscheme) {
        System.out.println("devicePatrolScheme:" + devicePatrolscheme.toString());
        try {
            System.out.println("更新设备维修经验库");
            // 尝试将数据插入数据库
            if (devicePatrolschemeMapper.insert(devicePatrolscheme) > 0) {
                // 定义Redis的键
                String redisKey = "SchemeList:";
                try {
                    // 从数据库获取当前所有数据
                    String condition = "";
                    String type = "";
                    List<DevicePatrolscheme> devicePatrolschemeList = devicePatrolschemeMapper.schemeList(condition, type, ""); // 可以根据需要替换为实际查询条件
                    // 将更新后的数据写入Redis
                    redisUtil.set(redisKey, devicePatrolschemeList);
                } catch (Exception e) {
                    // 处理Redis操作异常
                    System.err.println("Redis更新失败: " + e.getMessage());
                    // 这里可以根据实际情况决定是否要抛出异常或者进行其他处理
                }
                return "添加成功";
            } else {
                return "添加失败";
            }
        } catch (Exception e) {
            // 处理数据库操作异常
            System.err.println("数据库操作失败: " + e.getMessage());
            return "添加失败";
        }
    }

    @Override
    public String update(DevicePatrolscheme devicePatrolscheme) {
        System.out.println("devicePatrolScheme:" + devicePatrolscheme.toString());
        try {
            System.out.println("更新设备维修经验库");
            // 尝试将数据插入数据库
            UpdateWrapper uw = new UpdateWrapper();
            uw.set("update_time", devicePatrolscheme.getUpdateTime());
            uw.set("cause", devicePatrolscheme.getCause());
            uw.set("patrolScheme_class", devicePatrolscheme.getPatrolschemeClass());
            uw.set("patrolScheme_person", devicePatrolscheme.getPatrolschemePerson());
            uw.eq("code", devicePatrolscheme.getCode());
            if (devicePatrolschemeMapper.update(devicePatrolscheme, uw) > 0) {
                // 定义Redis的键
                String redisKey = "SchemeList:";
                try {
                    // 从数据库获取当前所有数据
                    String condition = "";
                    String type = "";
                    List<DevicePatrolscheme> devicePatrolschemeList = devicePatrolschemeMapper.schemeList(condition, type, ""); // 可以根据需要替换为实际查询条件
                    // 将更新后的数据写入Redis
                    redisUtil.set(redisKey, devicePatrolschemeList);
                } catch (Exception e) {
                    // 处理Redis操作异常
                    System.err.println("Redis更新失败: " + e.getMessage());
                    // 这里可以根据实际情况决定是否要抛出异常或者进行其他处理
                }
                return "修改成功";
            } else {
                return "修改失败";
            }
        } catch (Exception e) {
            // 处理数据库操作异常
            System.err.println("数据库操作失败: " + e.getMessage());
            return "修改失败";
        }
    }

    @Override
    public String del(Integer id, Integer status,String code) {
        UpdateWrapper uw = new UpdateWrapper();
        uw.set("is_delete", 1);
        uw.eq("patrolScheme_id", id);
        String redisKey = "SchemeList:";
        if (redisUtil.hasKey(redisKey)) {
            String redisKey1 = "TaskList:";
            UpdateWrapper uw1 = new UpdateWrapper();
            uw1.set("is_delete", 1);
            uw1.eq("inspectionTask_code", code);
            deviceInspectiontaskMapper.update(new DeviceInspectiontask(),uw1);
            if (redisUtil.hasKey(redisKey1)) {
                Set keys = redisTemplate.keys(redisKey1);
                redisTemplate.delete(keys);
            }

            Set keys = redisTemplate.keys(redisKey);
            redisTemplate.delete(keys);
        }
        return devicePatrolschemeMapper.update(new DevicePatrolscheme(), uw) == 1 ? "删除成功" : "删除失败";
    }

}




